package org.springblade.modules.admin.mapper;

import com.baomidou.mybatisplus.annotation.InterceptorIgnore;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;import org.apache.ibatis.annotations.Param;
import org.springblade.modules.admin.dto.ElevatorPrincipalQueryDTO;
import org.springblade.modules.admin.dto.feishu.ElevatorMaintainCostListDTO;
import org.springblade.modules.admin.dto.feishu.GalaxyElevatorTrackUpdateDTO;
import org.springblade.modules.admin.dto.platform.BuildingSearchDTO;
import org.springblade.modules.admin.entity.*;
import org.springblade.modules.admin.vo.*;
import org.springblade.modules.admin.vo.contract.ContractElevatorVoV2;
import org.springblade.modules.admin.vo.elevator.ElevatorIntactSearchVo;
import org.springblade.modules.admin.vo.elevator.ElevatorIntactVo;
import org.springblade.modules.admin.vo.feishu.BuildingElevatorFeiShuVO;
import org.springblade.modules.admin.vo.feishu.ElevatorDataReportVO;
import org.springblade.modules.admin.vo.feishu.GalaxyElevatorNumVO;
import org.springblade.modules.admin.vo.feishu.GovernmentElevatorPoolVO;
import org.springblade.modules.admin.vo.openapi.SidaElevatorBasicVO;
import org.springblade.modules.admin.vo.platform.ElevatorVo;import org.springblade.modules.admin.vo.platform.TenantVO;
import org.springblade.modules.admin.vo.sugar.bi.BIScreenElevatorPlanPartsVO;
import org.springblade.modules.admin.vo.sugar.bi.BIScreenElevatorVO;
import org.springblade.modules.admin.vo.sugar.bi.BIScreenElevatorPlanVO;
import org.springblade.modules.admin.vo.sugar.estate.ElevatorInfoVo;

import java.util.Date;
import java.util.List;
import java.util.Map;

public interface ElevatorMapper extends BaseMapper<Elevator> {
    List<ElevatorVO> selectElevatorPage(@Param("page") IPage<ElevatorVO> page, @Param("elevator") Elevator elevator);

    List<ElevatorVO> selectElevatorPageByIds(@Param("page") IPage<ElevatorVO> page, @Param("elevatorIds") List<Long> elevatorIds);

    ElevatorVO selectElevator(Long id);

    ElevatorVO selectElevByPrivateNum(@Param("privateNum") String privateNum, @Param("elevatorId") Long elevatorId);

    ElevatorVO selectElevatorByAddress(@Param("elevatorAddress") String elevatorAddress, @Param("buildingId") Long buildingId);

    List<ElevatorDetail> getListByBuildingId(@Param("buildingId") Long buildingId,@Param("elevatorIds") List<Long> elevatorIds);

    /**
     * 获取公共电梯列表
     *
     * @param page              分页信息
     * @param buildingSearchDTO 查询条件
     * @return 数据集
     */
    IPage<ElevatorVo> elevatorListV2(IPage<ElevatorVo> page, @Param("buildingSearchDTO") BuildingSearchDTO buildingSearchDTO);

    List<ElevatorSimpleInfoVO> elevatorSelectList(@Param("buildingId") Long buildingId);

    TlwElevatorDetailVO getTlwElevatorDetail(@Param("elevatorId") Long elevatorId);

    List<ElevatorSimpleInfoVO> elevatorTlwSelectList(PlanConfigSearchVO search);

    /**
     * 根据项目id获取所关联的租户信息
     *
     * @param buildingSearchDTO 搜索条件
     * @return 数据集
     */
    List<TenantVO> elevatorTenantList(@Param("buildingSearchDTO") BuildingSearchDTO buildingSearchDTO);

    /**
     * 供梯联网查询电梯信息
     *
     * @param page
     * @param search
     * @return
     */
    IPage<ElevatorPageVO> devicePage(@Param("page") IPage<Object> page, @Param("search") ElevatorSearchVO search);

    /**
     * 梯联网电梯列表
     *
     * @param page
     * @param search
     * @return
     */
    List<TlwElevatorPageVO> tlwPage(@Param("page") IPage<TlwElevatorPageVO> page, @Param("search") PlanConfigSearchVO search);

    /**
     * 梯联网电梯列表
     *
     * @return
     */
    List<TlwElevatorPageVO> selectListByDeviceId(@Param("deviceId") String deviceId);

    /**
     * 批量查询电梯码
     *
     * @param elevatorIds
     * @return
     */
    List<WxAppCodeVO> batchDownloadWxAppCode(@Param("elevatorIds") List<Long> elevatorIds);

    /**
     * 电梯档案-列表
     *
     * @param page
     * @param elevator
     * @return
     */
    List<ElevatorDossierVO> elevatorDossierPage(@Param("page") IPage<ElevatorDossierVO> page, @Param("elevator") ElevatorVO elevator);

    /**
     * 获取所有的电梯信息
     *
     * @return 数据集
     */
    @InterceptorIgnore(tenantLine = "on")
    List<ElevatorInfoVo> getList(@Param("buildingId") Long buildingId, @Param("tenantId") String tenantId);

    List<ElevatorPrincipalPageVO> selectElevatorPrincipalPage(IPage<ElevatorPrincipalPageVO> page,@Param("queryDTO") ElevatorPrincipalQueryDTO queryDTO);

	Map<String, Integer> selectElevatorPrincipalCount();

	List<ElevatorPrincipalPageVO> selectElevatorPrincipal(@Param("queryDTO") ElevatorPrincipalQueryDTO queryDTO);

	ElevatorPageVO selectByElevatorId(@Param("elevatorId") Long elevatorId);

    List<ElevatorDetail> listWithoutEleNum();

	List<ElevatorDossierVO> elevatorDossierByelevatorNum(IPage<ElevatorDossierVO> page, String elevatorNum);

    ElevatorRelationDetailVO selectElevatorRelationDetail(Long elevatorId);

	Map<String, Object> elevatorDossierCount();

	MaintainPlanContent selectElevatorLastPlan(Long elevatorId);

    List<RobotElevatorSearchVO> getElevatorByBuilding(List<Long> buildingIds);

	/**
	 * 梯联网-显示屏-电梯基础信息
	 * @param deviceId
	 * @return
	 */
    TlwScreenEleBaseInfoVO tlwScreenEleBaseInfo(@Param("deviceId") String deviceId);

	List<ElevatorSimpleInfoVO> selectAllElevatorSimpleInfo();

	List<ElevatorDeptUserSimpleVO> selectElevatorPrincipalDeptSimpleInfo();

	@InterceptorIgnore(tenantLine = "on")
	List<ElevatorVO> selectAllElevatorDetailList();


	/**
	 * 维修大屏获取监控电梯的总数
	 * 维保中+非外包
	 * @return 数据集
	 */
    List<Elevator> getSugarMapEleList();

	/**
	 * 政府电梯池子
	 * @return 数据集
	 */
	List<GovernmentElevatorPoolVO> queryGovernmentElevatorPoolVOList();

	/**
	 * 根据获取电梯排期信息
	 * 租户写死为592800
	 * @return 数据集
	 */
    List<GalaxyElevatorTrackUpdateDTO> getGalaxyElevatorTrackUpdateDTO();

	/**
	 * 获取电梯检验报告数据
	 * 租户写死为592800
	 * @return 数据集
	 */
    List<ElevatorDataReportVO> getElevatorDataReportVO();

	/**
	 * 获取电梯唯一识别码信息，写死租户为592800
	 * @return 数据集
	 */
    List<GalaxyElevatorNumVO> getGalaxyElevatorNumVOs();

	/**
	 * 获取building电梯信息，写死租户为592800
	 * @return 数据集
	 */
	List<BuildingElevatorFeiShuVO> queryBuildingElevatorVOList();

    List<PartPlanElevatorNumVO> getGalaxyPartsPlanElevatorNum();

	/**
	 * 获取全量
	 * @return 结果
	 */
	List<GovernmentElevatorPoolVO> getGovernmentElevatorPoolVOFull();

	/**
	 * 获取电梯品牌
	 * @param ids
	 * @return
	 */
    List<ElevatorBrand> getBrandListOfElevatorId(List<Long> ids);


	/**
	 * 获取电梯完整度列表
	 *
	 * @param page
	 * @param elevatorIntactSearchVo 查询条件
	 * @return 数据集
	 */
	List<ElevatorIntactVo> pageList(IPage<ElevatorIntactVo> page, @Param("elevatorIntactSearchVo") ElevatorIntactSearchVo elevatorIntactSearchVo);

	/**
	 * 根据电梯id获取电梯类型
	 * @param elevatorId
	 * @return
	 */
	String getModeNameByElevatorId(Long elevatorId);

	List<ElevatorSearchConditionVO> getElevatorByPrivateNum(String privateNum);

	List<ElevatorSearchConditionVO> getElevatorByRegisterNumber(String registerNumber);

	List<ElevatorSearchConditionVO> getElevatorByEquipmentRegisterNumber(String equipmentRegisterNumber);
	List<SidaElevatorBasicVO> getElevatorListByTenantId(String tenantId);

	List<GovernmentElevatorPoolVO> getUnMarkList(@Param("markedDeviceCodeList") List<String> markedDeviceCodeList);

    List<GovernmentElevatorPoolVO> getUnMarkListFull();

    List<BIScreenElevatorVO> selectBIScreenBuildingElevator(@Param("startDate") String startDate, @Param("endDate") String endDate);

	List<BIScreenElevatorPlanVO> selectBIScreenBuildingElevatorWx(@Param("startDate") String startDate, @Param("endDate") String endDate);

	List<BIScreenElevatorPlanPartsVO> selectBuildingElevatorWxWork(@Param("startDate") String startDate, @Param("endDate") String endDate);

	List<BIScreenElevatorPlanPartsVO> selectBuildingElevatorPartsWork(@Param("startDate") String startDate, @Param("endDate") String endDate);

	List<ElevatorMaintainCostListDTO> selectElevatorMaintainCostList(List<Long> elevatorIds);

    int getMonitorElevatorCount(Date rangeEndDate);

	/**
	 * 下载合同信息
	 * @return 数据集
	 */
	List<ContractElevatorVoV2> downContractPlusExcel();

    List<SimpleElevatorInfoVO> listSimpleElevatorInfoByIds(List<Long> elevatorIds);

}
